package main

import "fmt"

// 实现接口时，使用值接收者和指针接收者的区别

// animal 动物的接口
type animal interface {
	speak()
	move()
}

// Cat 猫的结构体
type Cat struct {
	name string
}

// 方法1 使用值接受者
//// speak 猫叫
//func (c Cat) speak() {
//	fmt.Println("%s——喵喵喵", c.name)
//}
//
//// move 猫移动
//func (c Cat) move() {
//	fmt.Println("%s——在走路", c.name)
//}

// 使用指针类型
func (c *Cat) speak() {
	fmt.Println("%s——喵喵喵", c.name)
}

// move 猫移动
func (c *Cat) move() {
	fmt.Println("%s——在走路", c.name)
}

func main() {
	var x animal
	hh := Cat{name: "花花"} // Cat  结构体类型  值
	x = hh                // 不能把值类型 给 指针的接收者
	x.move()
	fmt.Println(x)
	tom := &Cat{"Tom"} // *Cat 指针类型
	x = tom
	x.speak()
	fmt.Println(x)
}
